#ifndef _MAGIC_HPP_
#define	_MAGIC_HPP_
/*******************************************************************************
 *! \file magic.hpp                                                           **
 ** Description:                                                              **
 **                                                                           **
 ** Open Source Initiative (OSI) Approved 2-clause BSD License                             **
 **                                                                           **
 **  Copyright (c) 2009-2010 Barry "Gian" James  <bjames@munixos.net>         **
 **  All rights reserved.                                                     **
 **                                                                           **
 **  Redistribution and use in source and binary forms, with or without       **
 **  modification, are permitted provided that the following conditions are   **
 **  met:                                                                     **
 **                                                                           **
 **  * Redistributions of source code must retain the above copyright notice, **
 **    this list of conditions and the following disclaimer.                  **
 **  * Redistributions in binary form must reproduce the above copyright      **
 **    notice, this list of conditions and the following disclaimer in the    **
 **    documentation and/or other materials provided with the distribution.   **
 **                                                                           **
 **  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS      **
 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED **
 ** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           **
 ** PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT        **
 ** HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    **
 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED  **
 ** TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR    **
 ** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    **
 ** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      **
 ** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        **
 ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              **
 **                                                                           **
 ******************************************************************************/
// Created on March 17, 2010, 8:15 PM
// Modified $Date: 2011-09-18 21:48:59 +0000 (Sun, 18 Sep 2011) $ by $Author: gian.james $
#define magic_hpp_ID   "$Id: magic.hpp 145 2011-09-18 21:48:59Z gian.james $"

#include "common.hpp"
#include "object.hpp"
#include "action.hpp"

//////////////////////////////[ Spells
enum class Watchtower { North, South, East, West };
enum class WatchtowerElement { Earth, Fire, Air, Water };
enum class Aethyr {
    tex, rii, bag, zaa, des, vti, nia,
    tor, lin, asp, khr, pop, zen, tan, lea, oxo, vta, zim, loe, hah, zak,
    zip, zid, deo, maz, lit, paz, zom, arn, lil
};
enum class Component { Verbal=0x01, Somatic=0x02, Material=0x04, Focus=0x08 };
enum class MType { Spell, Poltice, Herb, Potion, Catalyst, Tome };

//! Outlines the attributes of a spell
class Spell : public WorldObject
{
public:
//    Spell();
    Spell(std::string n);
    
private:
    Aethyr      aethyr;
    Watchtower  tower;
    ActionType  castTime;
    MType       mtype;
    Component   components;
};

// Alchemy/Potions

// Items

//////////////////////////////[ Herbology
//! Lovely little herbs for use in poltices, potions, or raw
struct Herb : public WorldObject
{
//    Herb();
    Herb(std::string n);
    Locale          locality;       //!< where is it found?
    int             complexity;     //!< how rare, how difficult to use
    MType           mtype;
};

//! A poltice, mostly raw herb in a pastey consistency
class Poltice : public WorldObject
{
public:
//    Poltice();
    Poltice(std::string n);

private:

    MType       mtype;
};

//! The unforgettable potion class
class Potion : public WorldObject
{
public:
    Potion(std::string n);

private:

};

#endif	/* _MAGIC_HPP_ */

